// Copyright 2015 Christian Roggia. All rights reserved.
// Use of this source code is governed by an Apache 2.0 license that can be
// found in the LICENSE file.

#include "../Global/Global.h"

#define strcpyW_			Shamoon::Utils::String::strcpyW
#define strlenW_			Shamoon::Utils::String::strlenW

#define _strcpyW(a, b)		strcpyW_(a, b, strlenW_(b) * sizeof(WCHAR))
#define _strinsW(a, b, c)	strcpyW_(&a[c], b, strlenW_(b) * sizeof(WCHAR))
#define _strendW(a, b)		a[b] = 0

#define M_STRING01(a, b) \
{ \
	_strcpyW(a, b); \
	_strendW(a, strlenW_(b)); \
}

#define M_STRING02(a, b, c) \
{ \
	_strcpyW(a, b); \
	_strinsW(a, c, strlenW_(b)); \
	_strendW(a, strlenW_(b) + strlenW_(c)); \
}

#define M_STRING03(a, b, c, d) \
{ \
	_strcpyW(a, b); \
	_strinsW(a, c, strlenW_(b)); \
	_strinsW(a, d, strlenW_(b) + strlenW_(c)); \
	_strendW(a, strlenW_(b) + strlenW_(c) + strlenW_(d)); \
}

#define M_STRING04(a, b, c, d, e) \
{ \
	_strcpyW(a, b); \
	_strinsW(a, c, strlenW_(b)); \
	_strinsW(a, d, strlenW_(b) + strlenW_(c)); \
	_strinsW(a, e, strlenW_(b) + strlenW_(c) + strlenW_(d)); \
	_strendW(a, strlenW_(b) + strlenW_(c) + strlenW_(d) + strlenW_(e)); \
}

namespace Shamoon { namespace Utils { namespace String {
		WCHAR *strcpyW(WCHAR *a1, const WCHAR *a2, ...);
		char *strset(char *a1, char a2, int a3);
		UINT32 strlenW(const WCHAR *string);
		bool strcmpW(WCHAR *a1, WCHAR *a2);
		char *btowc(char *a1, WCHAR *a2, int a3);
	}
}}